package com.Oct_TwentyEight;

import java.util.Stack;

/**
 * 155. 最小栈
 * 设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
 *
 * 实现 MinStack 类:
 *
 * MinStack() 初始化堆栈对象。
 * void push(int val) 将元素val推入堆栈。
 * void pop() 删除堆栈顶部的元素。
 * int top() 获取堆栈顶部的元素。
 * int getMin() 获取堆栈中的最小元素。
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/min-stack
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/10/29 00:37
 */

public class MinStack {

    Stack<Integer> stack1,stack2;

    public MinStack() {
        stack1=new Stack<>();
        stack2=new Stack<>();
    }

    public void push(int val) {
        stack1.push(val);
        if (stack2.isEmpty()||stack2.peek()>=val) stack2.push(val);
    }

    public void pop() {
        int n=stack1.peek();
        stack1.pop();
        if (stack2.peek()==n) stack2.pop();
    }

    public int top() {
        return stack1.peek();
    }

    public int getMin() {
        return stack2.peek();
    }

}
